#pragma once
#include "View.h"

#include "../commons/Constants.h"
#include "../commons/Subject.h"

#include "../controller/ControladorAgua.h"

#include "../model/GameModel.h"
#include "../model/StageParser.h"
#include "../model/ConstructorTerreno.h"
#include "../model/Agua.h"

#include "FigureView.h"
#include "FiguresViewFactory.h"
#include "VistaAgua.h"

class GameView : public View
{
private:
	// Modelado logico del juego
	GameModel* gameModel;

	// Vista del terreno
	VistaTerreno* vistaTerreno;

	// Constructor del terreno
	ConstructorTerreno* constructor;

	SDL_Texture* imageSky;
	
	// Vistas de las figuras
	vector <FigureView*> views;
	
	// Mascara/Fondo(Sky) a montar
	SDL_Surface* mask;
	// Nombre del archivo de mascara del terreno
	string groundImageName;
	// Nombre del archivo de imagen de fondo(Sky)
	string skyImageName;

	bool GameView::loadAndBlitSurface();
	void GameView::buildGround(ConstructorTerreno &constructor);
	void GameView::buildWater();
	void GameView::buildFigures();
	void GameView::drawFigures();

public:
	GameView(void);
	GameView(View* view, GameModel* gameModel);

	bool GameView::loadMedia();
	void GameView::close();
	void GameView::clear();
	void GameView::update();

	SDL_Surface* GameView::getMask();
	void GameView::setMask(SDL_Surface* mask);

	string GameView::getGroundImageName();
	void GameView::setGroundImageName(string groundImageName);
		
	string GameView::getSkyImageName();
	void GameView::setSkyImageName(string skyImageName);

	~GameView(void);
};

